#include "Pacote.h"
#include "Pesquisa.h"
#include <iostream>
#include <ctime>

    /**********************************************************************
        Classe: Pacote
        Funcionalidade: Guarda um pacote de vacinas, que está disponível
    para o uso dos pacientes associados a este cliente
    ***********************************************************************/

/* Construtor da classe Pacote */
Pacote::Pacote() {
	dataPacote = time(NULL);
}

/* Metodo addVacina
 * realiza a adição de uma vacina ao pacote.
 * Recebe a descrição da vacina a ser adicionada, bem como a lista de todas
 * as vacinas existentes.
 * Retorna 1 caso a vacina exista e tenha sido adicionada, 0 caso contrario
 */

bool Pacote::addVacina(string descricao, list<Vacina> allVacinas) {
	/* Verifica se a vacina com a dada descrição existe a já à adiciona
     ao pacote. */
	vacinas.push_back(Pesquisa::buscarVacina(descricao, allVacinas));
	return true;
}

/* Metodo removeVacina
 * realiza a remoção de uma vacina do Pacote.
 * Recebe a descrição da vacina a ser removida.
 * Retorna 1 caso tenha conseguido remover, 0 caso contrario
 */
bool Pacote::removeVacina(string descricao) {
	list<Vacina*>::iterator it;
	for (it = vacinas.begin(); it != vacinas.end(); it++) {
		if (descricao == (*it)->getDescricao()) {
			vacinas.erase(it);
			return true;
		}
	}
	return false;
}

list<Vacina*> &Pacote::getVacinas(){
    return vacinas;
}

/* Metodo calcularValorTotal
 * realiza o calculo do valor total do pacote.
 * Retorna o valor total das vacinas.
 */
double Pacote::calcularValorTotal() {
	list<Vacina*>::iterator it;
	double valor = 0;
	for (it = vacinas.begin(); it != vacinas.end(); it++) {
		valor += (*it)->getPreco();
	}
	return valor;
}

/* Metodo elaborarPacote
 * Elabora um pacote de vacinas para o paciente de acordo com a sua idade.
 * Recebe o paciente para o qual o pacote será elaborado.
 */
void Pacote::elaborarPacote(Paciente * p,list<Vacina> &vac) {
	int flag = 0;
	list<Vacina>::iterator it;
	list<ItemCarteira>::iterator it2;

	for (it = vac.begin(); it != vac.end(); it++) {

		if (p->getIdade() <= (it)->getIdadeMax()
				&& p->getIdade() >= it->getIdadeMin()) {

			for (it2 = p->getCarteira().getListItemCarteira().begin();
					it2 != p->getCarteira().getListItemCarteira().end();
					it2++) {

				if ((*it2).getVacinaAplicada()->getDescricao()
						== (it)->getDescricao()) {
					flag = 1;
				}
			}
			if (flag != 1) {
				vacinas.push_back(&(*it));
				flag = 0;
			}
		}
	}
}
